import json
import os
import re
from pathlib import Path

# ==================== 配置选项 ====================
# 在这里修改配置，无需修改代码其他部分

# wp为s时是否用()包围
WRAP_S_WITH_PARENTHESES = True

# wp为g时是否添加换行
ADD_NEWLINE_FOR_G = True

# 是否包含wp信息用于调试（可选）
INCLUDE_WP_INFO = False

# 输出文件名
OUTPUT_FILE = "transcript_result.txt"

# 处理目录路径
DIRECTORY_PATH = r"C:\Users\Administrator\Desktop\1\filtered_sentence_messages"

# ==================== 脚本代码 ====================

def extract_w_values_from_file(file_path):
    """从单个文件中提取所有"w"值，根据wp类型进行特殊处理"""
    w_values = []
    
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            content = f.read()
        
        # 尝试解析为JSON（如果文件包含完整的JSON）
        try:
            data = json.loads(content)
            w_values.extend(extract_from_json_object(data))
        except json.JSONDecodeError:
            # 如果不是完整JSON，使用正则表达式提取
            w_values.extend(extract_with_regex(content))
        
        print(f"  找到 {len(w_values)} 个匹配项")
        
    except Exception as e:
        print(f"处理文件 {file_path} 时出错: {e}")
        
    return w_values

def extract_from_json_object(data):
    """从JSON对象中提取w值"""
    w_values = []
    
    def extract_from_dict(obj):
        if isinstance(obj, dict):
            # 检查是否包含w和wp字段
            if 'w' in obj and 'wp' in obj:
                w_value = obj['w']
                wp_type = obj['wp']
                
                # 处理所有w值，包括空值
                processed_value = process_w_value(w_value, wp_type)
                w_values.append(processed_value)
                print(f"    处理{wp_type}类型: '{w_value}' -> '{processed_value}'")
            
            # 递归处理所有值
            for value in obj.values():
                extract_from_dict(value)
        elif isinstance(obj, list):
            for item in obj:
                extract_from_dict(item)
    
    extract_from_dict(data)
    return w_values

def extract_with_regex(content):
    """使用正则表达式从文本中提取w值"""
    w_values = []
    
    # 改进的正则表达式，更准确地匹配JSON结构
    # 匹配 "w":"值" 和对应的 "wp":"类型"
    pattern = r'"w"\s*:\s*"([^"]*)"[^}]*?"wp"\s*:\s*"([^"]*)"'
    matches = re.findall(pattern, content)
    
    for w_value, wp_type in matches:
        # 处理所有w值，包括空值
        processed_value = process_w_value(w_value, wp_type)
        w_values.append(processed_value)
        print(f"    处理{wp_type}类型: '{w_value}' -> '{processed_value}'")
    
    return w_values

def process_w_value(w_value, wp_type):
    """根据wp类型处理w值"""
    processed_value = w_value
    
    # 处理空值的情况
    if not w_value or w_value.strip() == "":
        if wp_type == 'g' and ADD_NEWLINE_FOR_G:
            # wp为g且w为空时，只添加换行符
            processed_value = "\n"
        else:
            # 其他wp类型且w为空时，返回空字符串（不输出）
            processed_value = ""
    else:
        # 处理非空值
        if wp_type == 's' and WRAP_S_WITH_PARENTHESES:
            processed_value = f"({w_value})"
        elif wp_type == 'g' and ADD_NEWLINE_FOR_G:
            processed_value = f"{w_value}\n"
        else:
            processed_value = w_value
    
    # 可选：添加wp信息用于调试
    if INCLUDE_WP_INFO:
        processed_value = f"{processed_value}[wp:{wp_type}]"
    
    return processed_value

def process_all_files(directory_path):
    """处理目录下所有txt文件"""
    all_w_values = []
    
    # 获取目录下所有txt文件
    txt_files = list(Path(directory_path).glob("*.txt"))
    
    print(f"找到 {len(txt_files)} 个txt文件")
    
    for file_path in txt_files:
        print(f"正在处理: {file_path.name}")
        w_values = extract_w_values_from_file(file_path)
        all_w_values.extend(w_values)
        print(f"  从 {file_path.name} 提取了 {len(w_values)} 个w值")
    
    return all_w_values

def main():
    # 显示当前配置
    print("当前配置:")
    print(f"  处理目录: {DIRECTORY_PATH}")
    print(f"  wp为s时用()包围: {WRAP_S_WITH_PARENTHESES}")
    print(f"  wp为g时添加换行: {ADD_NEWLINE_FOR_G}")
    print(f"  包含wp信息: {INCLUDE_WP_INFO}")
    print(f"  输出文件: {OUTPUT_FILE}")
    print()
    
    # 检查目录是否存在
    if not os.path.exists(DIRECTORY_PATH):
        print(f"错误: 目录不存在: {DIRECTORY_PATH}")
        return
    
    # 提取所有w值
    w_values = process_all_files(DIRECTORY_PATH)
    
    # 拼接所有w值
    transcript_text = "".join(w_values)
    
    # 保存结果到文件
    output_file = os.path.join(DIRECTORY_PATH, OUTPUT_FILE)
    with open(output_file, 'w', encoding='utf-8') as f:
        f.write(transcript_text)
    
    print(f"\n总共提取了 {len(w_values)} 个w值")
    print(f"转写结果已保存到: {output_file}")
    print(f"转写文本长度: {len(transcript_text)} 字符")
    
    # 显示前200个字符作为预览
    if transcript_text:
        preview = transcript_text[:200]
        if len(transcript_text) > 200:
            preview += "..."
        print(f"转写内容预览: {repr(preview)}")  # 使用repr()显示转义字符
    else:
        print("未找到任何w值")

if __name__ == "__main__":
    main() 